package com.thinvent.recommend.service;

import com.thinvent.recommend.manager.dto.DocVectorDTO;

import java.io.IOException;
import java.util.List;

/**
 * Elasticsearch 向量查询服务
 */
public interface ESQueryService {
    /**
     * 分页查询所有向量文档
     * @param page 第几页，从 1 开始
     * @param size 每页条数
     * @return DocVectorDTO 列表
     */
    List<DocVectorDTO> searchAll(int page, int size) throws IOException;

    /**
     * 根据日期范围分页查询向量文档
     * @param startDate 起始日期，格式 "yyyy-MM-dd'T'HH:mm:ss"
     * @param endDate   结束日期，格式 "yyyy-MM-dd'T'HH:mm:ss"
     * @param page      第几页，从 1 开始
     * @param size      每页条数
     * @return DocVectorDTO 列表
     */
    List<DocVectorDTO> searchByDate(String startDate, String endDate, int page, int size) throws IOException;

    /**
     * 根据文档 ID 查询单条向量数据
     * @param docId 文档业务 ID
     * @return DocVectorDTO 或 null（若未找到）
     */
    DocVectorDTO getById(String docId) throws IOException;

    /**
     * 批量删除指定文档
     * @param docIds 文档业务 ID 列表
     */
    void deleteByIds(List<String> docIds) throws IOException;

    /**
     * 删除索引中所有文档
     */
    void clearAll() throws IOException;

    /**
     * 删除整个索引
     * @throws IOException 当删除失败时抛出
     */
    void deleteIndex() throws IOException;

    /**
     * 获取配置索引的 Mapping 信息（原始 JSON 字符串）
     *
     * @return 索引 Mapping 的 JSON
     * @throws IOException 调用 ES 失败时抛出
     */
    String getIndexMapping() throws IOException;
}
